Loading packages

package_check <- lapply(
  packages,
  function(x) {
    if (!require(x, character.only = TRUE)) {
      install.packages(x, dependencies = TRUE)
      library(x, character.only = TRUE)
    }
  }
)
Loading required package: tidyverse
Warning: package ‘ggplot2’ was built under R version 4.2.3Warning: package ‘tidyr’ was built under R version 4.2.3Warning: package ‘dplyr’ was built under R version 4.2.3Warning: package ‘stringr’ was built under R version 4.2.3── Attaching core tidyverse packages ──────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.0     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.1
✔ purrr     1.0.2     ── Conflicts ────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors

The grammer of ggplot2

Load Data

1- Data

initiate an empty canvas

2- Aesthetics

Maps data (variables) to the graph properties such as;

  • positions(x,y)
  • colours(colours, fill)
  • shapes(shape, linetype)
  • size(size)
  • transparent(alpha)
  • groupings(group)

3- Geometries

Interpret data (aesthetics) as graphs.

  • points
  • lines
  • polygons
  • text labels
  • …

we may add visual properties to the graph

Mapping vs visual properties

Mapping

Visual properties

Mapping expresions

Global vs Local

DIV

1st column when browser is wide

ggplot(
    bikes_df,
    aes(x = temp_feel, y = count,
        color = season)
  ) +
  geom_point(
    alpha = .5
  )

… 2nd column when browser is wide

ggplot(
    bikes_df,
    aes(x = temp_feel, y = count)
  ) +
  geom_point(
    aes(color = temp_feel > 20),
    alpha = .5
  )

DIV format

1st column code

2st column code

1st column plot

2st column plot

END

LS0tCnRpdGxlOiAiQ29uY2VwdHMgb2YgZ2dwbG90MiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBMb2FkaW5nIHBhY2thZ2VzCgpgYGB7cn0KcGFja2FnZXMgPC0gYygKICAgICJ0aWR5dmVyc2UiLAogICAgImdncGxvdDIiCikKCnBhY2thZ2VfY2hlY2sgPC0gbGFwcGx5KAogIHBhY2thZ2VzLAogIGZ1bmN0aW9uKHgpIHsKICAgIGlmICghcmVxdWlyZSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7CiAgICAgIGluc3RhbGwucGFja2FnZXMoeCwgZGVwZW5kZW5jaWVzID0gVFJVRSkKICAgICAgbGlicmFyeSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCiAgICB9CiAgfQopCmBgYAoKIyBUaGUgZ3JhbW1lciBvZiBnZ3Bsb3QyCmBgYHtyfQp0aWJibGUoCkNvbXBvbmVudCA9IGMoIjEtRGF0YSIsIjItQWVzdGhldGljcyIsICIzLUdlb21ldHJpZXMiLCAiNC1TdGF0aXN0aWNzIiwgCiAgICAgICAgICAgICAgIjUtU2NhbGVzIiwgIjYtQ29vcmRpbmF0ZSBTeXN0ZW0iLCAiNy1GYWNldHMiLCAiOC1UaGVhbWVzIiksIApGdW5jdGlvbiA9ICBjKCJnZ3Bsb3QoZGF0YSkiLCAiYWVzKCkiLCAiZ2Vtb18qKCkiLCAic3RhdF8qKCkiLCAic2NhbGVfKigpIiwgCiAgICAgICAgICAgICAgImNvb3JkXyooKSIsICJmYWNldF8qKCkiLCAidGhlYW1lXyooKSIpLApEZXNjcmlwdGlvbiA9IGMoIlRoZSByYXcgZGF0YSB5b3Ugd2FudCB0byB2aXN1YWxpemUiLAogICAgICAgICAgICAgICAgIkFlc3RoZXRpYyBtYXBwaW5ncyBiZXR3ZWVuIHZhcmlhYmxlcyBhbmQgdmlzdWFsIHByb3BlcnRpZXMiLCAKICAgICAgICAgICAgICAgICJUaGUgZ2VvbWV0cmljIHNoYXBlcyByZXByZXNlbnRpbmcgdGhlIGRhdGEiLAogICAgICAgICAgICAgICAgIlRoZSBzdGF0aXN0aWNzIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQgdG8gdGhlIGRhdGEiLAogICAgICAgICAgICAgICAgIk1hcHMgYmV0d2VlbiB0aGUgZGF0YSBhbmQgdGhlIGFzZXN0aGV0aWMgZGltbWVudGlvbnMiLAogICAgICAgICAgICAgICAgIk1hcHMgZGF0YSBpbnRvIHRoZSBwbGFuZSBvZiB0aGUgZGF0YSByZWN0ZW5nbGUiLAogICAgICAgICAgICAgICAgIlRoZSBhcnJhbmdlbWVudCBvZiB0aGUgZGF0YSBpbnRvIGEgZ3JpZCBvZiBwbG90cyIsCiAgICAgICAgICAgICAgICAiVGhlIG92ZXJhbGwgdmlzaXVhbCBvZiB0aGUgZ2FyYXBoIgogICAgICAgICAgICAgICAgKQopCmBgYAojIExvYWQgRGF0YQoKCmBgYHtyfQpiaWtlc19kZiA8LSByZWFkX2NzdihmaWxlLnBhdGgoImRhdGEiLCAibG9uZG9uLWJpa2VzLWN1c3RvbS5jc3YiKSwKICBjb2xfdHlwZXMgPSAiRGNmZmZpbGxsZGRkZGMiCikKYGBgCiMjIDEtIERhdGEgCmluaXRpYXRlIGFuIGVtcHR5IGNhbnZhcwpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLndpZHRoPTQsIGZpZy5oZWlnaHQ9M30KZ2dwbG90KGRhdGEgPSBiaWtlc19kZikKYGBgCiMjIDItIEFlc3RoZXRpY3MKTWFwcyBkYXRhICh2YXJpYWJsZXMpIHRvIHRoZSBncmFwaCBwcm9wZXJ0aWVzIHN1Y2ggYXM7CgoqIHBvc2l0aW9ucyh4LHkpCiogY29sb3Vycyhjb2xvdXJzLCBmaWxsKQoqIHNoYXBlcyhzaGFwZSwgbGluZXR5cGUpCiogc2l6ZShzaXplKQoqIHRyYW5zcGFyZW50KGFscGhhKQoqIGdyb3VwaW5ncyhncm91cCkKCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcud2lkdGg9NCwgZmlnLmhlaWdodD0zfQpiaWtlc19kZiAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkpCmBgYAojIyAzLSBHZW9tZXRyaWVzCkludGVycHJldCBkYXRhIChhZXN0aGV0aWNzKSBhcyBncmFwaHMuCgoqIHBvaW50cwoqIGxpbmVzCiogcG9seWdvbnMKKiB0ZXh0IGxhYmVscwoqIC4uLgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmJpa2VzX2RmICU+JQogIGdncGxvdChhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50KSkgKwogIGdlb21fcG9pbnQoKQpgYGAKd2UgbWF5IGFkZCB2aXN1YWwgcHJvcGVydGllcyB0byB0aGUgZ3JhcGgKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmJpa2VzX2RmICU+JQogIGdncGxvdChhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50KSkgKwogIGdlb21fcG9pbnQoCiAgICBjb2xvciA9ICIjMkYwMDVGIiwKICAgIGFscGhhID0gLjUsCiAgICBzaGFwZSA9ICJYIiwKICAgIHN0cm9rZSA9IDEsCiAgICBzaXplID0gMgogICkKYGBgCiMjIyBNYXBwaW5nIHZzIHZpc3VhbCBwcm9wZXJ0aWVzCgpNYXBwaW5nIAoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgY29sb3IgPSAiIzI4YTg3ZCIsCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKIFZpc3VhbCBwcm9wZXJ0aWVzCiAKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgYWVzKGNvbG9yID0gc2Vhc29uKSwKICAgIGFscGhhID0gLjUKICApCgpgYGAKIyMjIE1hcHBpbmcgZXhwcmVzaW9ucwoKYGBge3J9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgYWVzKGNvbG9yID0gdGVtcF9mZWVsID4gMjApLAogICAgYWxwaGEgPSAuNQogICkKYGBgCiMjIyBHbG9iYWwgdnMgTG9jYWwKCmBgYHtyfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQsCiAgICAgICAgY29sb3IgPSBzZWFzb24pCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFscGhhID0gLjUKICApCmBgYAojIyMgRElWCjxkaXYgY2xhc3M9J2ZsdWlkLXJvdyc+CiAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPgoKMXN0IGNvbHVtbiB3aGVuIGJyb3dzZXIgaXMgd2lkZQoKYGBge3J9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCwKICAgICAgICBjb2xvciA9IHNlYXNvbikKICApICsKICBnZW9tX3BvaW50KAogICAgYWxwaGEgPSAuNQogICkKYGBgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPgoKLi4uIDJuZCBjb2x1bW4gd2hlbiBicm93c2VyIGlzIHdpZGUKCmBgYHtyfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQpCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFlcyhjb2xvciA9IHRlbXBfZmVlbCA+IDIwKSwKICAgIGFscGhhID0gLjUKICApCmBgYAogIDwvZGl2PgoKPC9kaXY+CiMgRElWIGZvcm1hdAo8ZGl2IGNsYXNzPSdmbHVpZC1yb3cnPgo8ZGl2IGNsYXNzPSdjb2wtbWQtNic+CiAgMXN0IGNvbHVtbiBjb2RlCmBgYHtyfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQsCiAgICAgICAgY29sb3IgPSBzZWFzb24pCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFscGhhID0gLjUKICApCmBgYAogIAo8L2Rpdj4KPGRpdiBjbGFzcz0nY29sLW1kLTYnPgogIDJzdCBjb2x1bW4gY29kZQpgYGB7cn0KZ2dwbG90KAogICAgYmlrZXNfZGYsCiAgICBhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50LAogICAgICAgIGNvbG9yID0gc2Vhc29uKQogICkgKwogIGdlb21fcG9pbnQoCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKICAKPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0nZmx1aWQtcm93Jz4KPGRpdiBjbGFzcz0nY29sLW1kLTYnPgogIDFzdCBjb2x1bW4gcGxvdApgYGB7ciBlY2hvPUZBTFNFfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQsCiAgICAgICAgY29sb3IgPSBzZWFzb24pCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFscGhhID0gLjUKICApCmBgYAoKPC9kaXY+CjxkaXYgY2xhc3M9J2NvbC1tZC02Jz4KICAyc3QgY29sdW1uIHBsb3QKYGBge3IgZWNobz1GQUxTRX0KZ2dwbG90KAogICAgYmlrZXNfZGYsCiAgICBhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50LAogICAgICAgIGNvbG9yID0gc2Vhc29uKQogICkgKwogIGdlb21fcG9pbnQoCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKICAKPC9kaXY+CjwvZGl2PgojIEVORAoKYGBge3IgZWNobz1GQUxTRX0KZ2dwbG90KAogICAgYmlrZXNfZGYsCiAgICBhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50LAogICAgICAgIGNvbG9yID0gc2Vhc29uKQogICkgKwogIGdlb21fcG9pbnQoCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKCmBgYHtyIGVjaG89RkFMU0V9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgYWxwaGEgPSAuNQogICkKYGBgCgo=